<?php
//Esto metodo no se puede llamar con ajax
//Este metodo importa personas desde un archivo en formato XML. Tambien crea los usuarios si esta habilitada la opcion.
//La respuesta se muestra en un iframe dentro del formulario.
function importar(){
	//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
	if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDirector') == '1' || $this->session->userdata('permisoVicedirector') == '1' || $this->session->userdata('permisoSecretario') == '1' || $this->session->userdata('permisoPreceptor') == 1)){	   
		//Segunda comprobacion: Que se haya pasado por post el archivo y si hay que crear los usuarios o no.
		if($this->input->post('usuarios',true) == '1' || $this->input->post('usuarios',true) == '0'){
			//Este es el mensaje que se mostrara al terminar de ejecutar el codigo.
			$mensaje = "";
			
			//Cargo el modelo donde estan los datos de los archivos
			$this->load->model('m_archivo');
			
			//Detalles de las configuraciones del archivo a subir (foto en este caso)
			$config['upload_path'] = "./archivosPrivados-FPCL3QFs6DkBHihS3aJI/personas/xml";
			$config['allowed_types'] = 'xml';
			$this->load->library('upload', $config);
			
			$ultimoIdInsertado = 0;
			$archivo = '';
			//Si no se subio el archivo hacer lo siguiente
			if (!$this->upload->do_upload('archivo')){
				$mensaje = 'No se ha subido ning\u00fan archivo o su archivo est\u00e1 fuera de las especificaciones. No se han importado personas. Posible error: ' . $this->upload->display_errors();;
			//Si se subio el archivo hacer lo siguiente
			}else{
				//Datos del archivo subido (XML)
				$upload_data = $this->upload->data();
				$archivo = $upload_data['file_name'];
				$extensionArchivo = $upload_data['file_ext'];
				
				//Mensaje que se va a mostrar
				$mensaje = 'Se ha subido el archivo correctamente.';
				
				//Cargo el modelo donde estan los datos de las personas
				$this->load->model('m_persona');
				
				//Cargo el modelo donde estan los datos de los usuarios
				$this->load->model('m_usuario');
				
				$xml = simplexml_load_file("./archivosPrivados-FPCL3QFs6DkBHihS3aJI/personas/xml/".$archivo);
				
				$resultado = 0;
				$resultadoUsuarios = 0;
				$resultadoParcial = 0;
				
				//REVISAR TIPO DOCUMENTO QUE SEA EXISTENTE Y EN CORCORDANCIA CON EL NOMBRE PASADO.
				//REVISAR FECHA NACIMIENTO QUE TENGA EL FORMATO CORRECTO.
				//REVISAR LOCALIDAD Y EL ID QUE SEA EXISTENTE Y EN CORCORDANCIA CON EL NOMBRE PASADO.
				//REVISAR SEXO (LISTO)
				//REVISAR ESTADO (LISTO)
				
				//Recorremos todas las personas del archivo XML y si tienen todos los datos minimos lo cargamos al sistema.
				foreach($xml->personas->persona as $persona){
					//Comprobamos que este cargado los dos datos minimos necesarios que son apellido y nombre de la persona.
					if($persona->apellido != "" && $persona->nombre != ""){
						//Cargamos el helper de seguridad para usar funciones de el, como ser, que se agreguen comillas a todos los strings.
						$this->load->helper('security');
						
						//Comprobamos y filtramos todos los campos de entradas para que tengan tipos validos.
						$apellido = $this->security->xss_clean($persona->apellido);
						$nombre = $this->security->xss_clean($persona->nombre);							
						
						$abreviatura = $this->security->xss_clean($persona->abreviatura);
						if(!$abreviatura != "") $abreviatura = null;
						
						$idTipoDocumento = $this->security->xss_clean($persona->idTipoDocumento);
						if(!(is_numeric($idTipoDocumento) && $idTipoDocumento>0)) $idTipoDocumento = null;
						
						$numeroDocumento = $this->security->xss_clean($persona->numeroDocumento);
						if(!is_numeric($numeroDocumento)) $numeroDocumento = null;
						
						$fechaNacimiento = $this->security->xss_clean($persona->fechaNacimiento);
						if(!$fechaNacimiento != "") $fechaNacimiento = null;
						
						$idLocalidad = $this->security->xss_clean($persona->idLocalidad);
						if(!(is_numeric($idLocalidad) && $idLocalidad>0)) $idLocalidad = null;
													
						$domicilio = $this->security->xss_clean($persona->domicilio);
						if(!$domicilio != "") $domicilio = null;
						
						$telefonoFijo = $this->security->xss_clean($persona->telefonoFijo);
						if(!$telefonoFijo != "") $telefonoFijo = null;
						
						$telefonoCelular = $this->security->xss_clean($persona->telefonoCelular);
						if(!$telefonoCelular != "") $telefonoCelular = null;
						
						$email = $this->security->xss_clean($persona->email);
						if(!$email != "") $email = null;
						
						$facebook = $this->security->xss_clean($persona->facebook);
						if(!$facebook != "") $facebook = null;
						
						$sexo = $this->security->xss_clean($persona->sexo);
						if(!(is_numeric($sexo) && ($sexo==0 || $sexo==1))) $sexo = null;
						
						$descripcion = $this->security->xss_clean($persona->descripcion);
						if(!$descripcion != "") $descripcion = null;
						
						$estado = $this->security->xss_clean($persona->estado);
						if(!(is_numeric($estado) && ($estado==0 || $estado==1))) $estado = 1;
						
						//Creamos la personas con los datos obtenidos del XML
						$resultadoParcial = $this->m_persona->crear($apellido,
																	 $nombre,
																	 $abreviatura,
																	 $idTipoDocumento,
																	 $numeroDocumento,
																	 $fechaNacimiento,
																	 $idLocalidad,
																	 $domicilio,
																	 $telefonoFijo,
																	 $telefonoCelular,
																	 $email,
																	 $facebook,
																	 0,
																	 $sexo,
																	 $descripcion,
																	 $estado,
																	 $this->session->userdata('idUsuarioLog'),
																	 random_string('alnum',20));
						
						//Contamos cuantas personas ya importamos.
						$resultado += $resultadoParcial;
					
						//Si se creó la persona vemos si hay q crear el usuario asociado.
						if($resultadoParcial == 1){
							//Si la persona se ha creado correctamente, vemos si hay que crear el usuario.
							$ultimoIdInsertado = $this->db->insert_id();
							
							//Comprobamos si hay que crearle o no el usuario a la persona recien importada
							if($this->input->post('usuarios',true) == '1'){
								$existeUsuario = 0;
								$usuario = "";
								$i=0;
								do{
									$i++;
									
									//Armo el usuario candidato
									$usuario = strtolower(substr($nombre,0,$i).$apellido);
									
									//Compruebo si el usuario armado existe
									$existeUsuario = $this->m_usuario->existeUsuario($usuario);
								
								}while($existeUsuario==1 && $i<=strlen($nombre));
								
								//Si podemos armar un nombre de usuario con el nombre y apellido y si tiene numero de documento cargado, creamos el usuario.
								if($existeUsuario == 0 && $usuario != "" && $numeroDocumento != ""){
									//Creamos el usuario
									$resultadoParcial = $this->m_usuario->crear($ultimoIdInsertado, $usuario, $numeroDocumento,0,0,0,0,0,0,0,0,1,$this->session->userdata('idUsuarioLog'));
									$resultadoUsuarios += $resultadoParcial;									
								}
							}
						}
					}
				}
				
				if($resultado > 0){
					if($resultado == 1)
						$mensaje .= " Se ha importado " . $resultado . " persona correctamente.";
					else
						$mensaje .= " Se han importado " . $resultado . " personas correctamente.";
					
					$mensaje .= " Se han creado " . $resultadoUsuarios . " usuario/s correctamente.";
				}
			}
			
			echo("<script> alert('".$mensaje."');</script>");
		} else {
			//No se han pasado los parametros necesarios para importar personas.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	} else {
		//El usuario no tiene permiso para realizar esta accion.
		//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
		$this->session->sess_destroy();			
	}
}

?>